package logger

import (
	"core/datetime"
	"fmt"

	"os"
	"path/filepath"
	"time"

	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

// def 输出日志的格式
func getEncoder() zapcore.Encoder {
	encoderConfig := zap.NewDevelopmentEncoderConfig()
	{
		// LevelKey值变为 level
		encoderConfig.LevelKey = "level"
		// MessageKey值变为 msg
		encoderConfig.MessageKey = "msg"
		// TimeKey值 变成time
		encoderConfig.TimeKey = "time"
		// 把输出的info 变成INFO 只需要丢对象 不许执行
		encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
		// 对时间进行格式化处理
		encoderConfig.EncodeTime = func(t time.Time, encoder zapcore.PrimitiveArrayEncoder) {
			encoder.AppendString(t.Local().Format(datetime.DateTimeFmt))
		}
	}

	return zapcore.NewJSONEncoder(encoderConfig)

}

// def 日志要输出到什么地方
func getWriterSyncer() zapcore.WriteSyncer {
	stSeparator := string(filepath.Separator)
	stRootDir, _ := os.Getwd()
	stLogFilePath := stRootDir + stSeparator + "logs" + stSeparator + time.Now().Format(datetime.DateFmt) + ".logger"
	fmt.Printf("日志路径:%s\r\n", stLogFilePath)
	// 日志分割
	hook := lumberjack.Logger{
		Filename:   stLogFilePath,     // 日志文件路径，默认 os.TempDir()
		MaxSize:    Config.MaxSize,    // 每个日志文件保存500M，默认 100M
		MaxBackups: Config.MaxBackups, // 保留3个备份，默认不限
		MaxAge:     Config.MaxAge,     // 保留28天，默认不限
		Compress:   false,             // 是否压缩，默认不压缩
	}

	return zapcore.AddSync(&hook)
}
